package unq.model

import java.util.List
import org.uqbar.commons.utils.Observable
import java.util.ArrayList
import org.uqbar.commons.model.ObservableUtils


@Observable
class Caso {
	@Property Juego juego
	@Property String nombre
	@Property Villano responsable
	@Property String reporte
	@Property String objetoRobado
	@Property Pais paisDelCrimen
	@Property String OrdenDeArresto 
	@Property Pais paisActual
	@Property List<Pais> recorridoVillano = new ArrayList
	@Property EstadoJuego estado = EstadoJuego.EN_CURSO 
	@Property List destinosFallidos = new ArrayList
	@Property List<Pais> planEscape
	
	
	new(String reporte){
		this._reporte = reporte 
	}
    new (Juego juego, String reporte){
		this.juego = juego
		this.reporte = reporte
	}
	
	new(List<Pais> plan){
		planEscape = plan
	}
	
	
	new(Juego juego, String nombre, ArrayList<Pais> paises, Villano villano, String reporte, String obj, Pais pais2, Pais pais3) {
		_juego = juego
		_nombre = nombre
		_planEscape = paises
		_responsable = villano
		_reporte = reporte
		_objetoRobado = obj
		_paisDelCrimen = pais2
		_paisActual = pais3
		recorridoVillano.add(pais2)
		villano.setCaso(this)		
	}
	def viajar(Pais p){
		
		paisActual = p
	
//		ObservableUtils.firePropertyChanged(this, "paisActual", paisActual)
	
		if(planEscape.contains(p)){
			
			responsable.setProximoPais(responsable.proximoPais + 1)
			 
			agregarDestinoAcertado(p)
		}else{
		
			responsable.setProximoPais(0)
			agregarDestinoFallido(p)
		}
		
	}
	
	def agregarDestinoAcertado(Pais pais) {
		if(!_recorridoVillano.contains(pais)){
		_recorridoVillano.add(pais)
			//ObservableUtils.firePropertyChanged(this, "recorridoVillano", recorridoVillano)
	}
	}
	
	def agregarDestinoFallido(Pais pais) {
		_destinosFallidos.add(pais)
		//	ObservableUtils.firePropertyChanged(this, "destinosFallidos", destinosFallidos)
	}
	
	def definirOrdenArresto(String villano)
	{
		this._OrdenDeArresto = villano
		//ObservableUtils.firePropertyChanged(this, "ordenDeArresto", ordenDeArresto)
	}
}